package com.cos.shop.services.impl;

import com.cos.shop.common.Const;
import com.cos.shop.dao.UserDao;
import com.cos.shop.dao.impl.UserDaoImpl;
import com.cos.shop.entity.User;
import com.cos.shop.services.UserServices;
import com.cos.shop.util.*;

import java.sql.SQLException;

/**
 * @author: COS
 * @time: 2022/2/23 14:37
 * @description:
 */
public class UserServicesImpl implements UserServices {
    private UserDao ud = new UserDaoImpl();

    @Override
    public User login(String username, String password) {
        try {
            if (StringUtils.isNotEmpty(username,password)) {
               User u =  ud.checkUserName(username);
                if (u!=null&&u.getUpassword().equals(MD5Utils.md5(password))) {
                    return u;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *
     * @author: COS
     * @return: 直接返回业务处理的提示信息,方便controller直接给出响应
     * @time: 2022/2/23 16:02
     * @description:
     * 1. 找不到用户
     * 2. 用户已激活
     * 3.激活成功
     * 4.激活失败
     */
    @Override
    public String active(String e, String c) {
        try {
            //使用邮箱和邮箱的激活码来查找用户
            User u =ud.getUserByCodeAndEmail(Base64Utils.decode(e),Base64Utils.decode(c));
            //* 1. 找不到用户
            if (u == null) {
                return "激活失败,原因:没有这个人存在,试试地狱?";
            }
            //* 2. 用户已激活
            if(u.getUstatus()== Const.IS_ACTIVE){
                return "用户已激活";
            }
            //* 3.激活成功
            //进行激活
            if (ud.activeUser(u.getUid())>0) {
                return "激活成功 OK~";
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        //* 4.激活失败
        return "激活失败,原因:你猜";
    }

    @Override
    public boolean reg(User u) {
        try {
            if (u != null) {
                //新增注册
                //先把密码进行加密
                u.setUpassword(MD5Utils.md5(u.getUpassword()));
                //设置邮箱的激活码
                u.setUcode(RandomUtils.createActive());
                if (ud.addUser(u)>0) {
                    //新增成功的时候,要发送邮件激活码过去
                    //为了解决效率问题使用线程发送邮件
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            EmailUtils.sendEmail(u);
                        }
                    }).start();
                    return true;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public User checkUserName(String username) {
        try {
            if (StringUtils.isNotEmpty(username)) {
                return ud.checkUserName(username);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}
